/**
 * 类型判断工具集
 */

/**
 * 检查值是否为空（空字符串/空数组/空对象/null/undefined）
 * @param {any} value - 需要检查的值
 * @returns {boolean} 是否为空
 * @example
 * isEmpty([]); // true
 * isEmpty({}); // true
 * isEmpty(''); // true
 * isEmpty(0); // false
 */
export const isEmpty = (value: any): boolean => {
  if (value == null) return true
  if (typeof value === 'string' || Array.isArray(value)) return value.length === 0
  if (value.constructor === Object) return Object.keys(value).length === 0
  return false
}

/**
 * 深度比较两个值是否相等
 * @param {any} a - 第一个值
 * @param {any} b - 第二个值
 * @returns {boolean} 是否深度相等
 * @example
 * deepEqual({a:1}, {a:1}); // true
 */
export const deepEqual = (a: any, b: any): boolean => {
  if (a === b) return true
  if (typeof a !== typeof b) return false

  if (typeof a === 'object' && a !== null && b !== null) {
    const keysA = Object.keys(a)
    const keysB = Object.keys(b)
    if (keysA.length !== keysB.length) return false

    return keysA.every(key => deepEqual(a[key], b[key]))
  }

  return false
}
